perm filename NTBOX.FAI[CMS,LCS]1 blob
sn#388569 filedate 1978-10-17 generic text, type T, neo UTF8
00100 TITLE TBOX
00200 .INSERT MAC748.FAI[CMS,LCS]
00300
00400 CMD ← 1 ↔ N ← 2 ↔ T ← 3 ↔ K ← 0
00500 SW0 ← 4 ↔ SW1 ← 5 ↔ SW2 ← 6 ↔ SPD ← 7
00600
00700 XTAL ← =6000000 ;In hertz.
00800 BRATE ← =9600 ;Baud rate
00900
01000 TBIT ← ((=10000000/BRATE)/((=10000000/XTAL)*=15))/2
01100
01200 CEW ← 6 ;Alfa led chip enables and write port.
01300 JS ← 7 ;Joy stick, CU, and led latch port.
01400
01500 JMP RST ;RESET VECTOR
01600 0
01700 DISXI ;EXTERNAL INTERRUPT VECTOR
01800 NOP
01900 NOP
02000 NOP
02100 DISTI ;TIMER INT VECTOR
02200 RETR
02300
02400 RST: MOVI 377 ;SETUP INPUT PORTS
02500 OUTB ;Latch bus output.
02600 OUTP 1 ;SPTT switches.
02650 MOVI 77 ;P4-7 and SCAN.
02700 OUTP 2
02710
02720 MOVAX 4 ;PBSW low.
02730 MOVAX 5 ;PBSW high.
02740
02750 MOVI 70 ;7 & 10.
02760 MOVAX CEW ;Enable all alfa leds.
02770 ROL ;A0-3 ← 0.
02780 MOVAX JS ;Clear JS and CU.
02790
02800 SWAP ;A0-3 ← 7.
02810 ANPA CEW ;NOT W
02820 CPLA
02830 ORPA CEW ;W
02840
02850 MOVI 217 ;10 & 17.
02860 ORPA CEW ;Disable all alfa leds.
02870
02880 SWAP ;A0-3 ← 10.
02890 ORPA JS ;NOT CU.
02895 CALL CALED ;Clear alfa leds.
02897
02900 CALL CLED ;Clear leds
03000 CLRA ;Zero A for input byte
03100 MOVAT ;Setup timer
03200 STRTT
03300 JMP SETFLG
03400
03500 ; Set scan flag and timer
03600 UPFLG: DJNZ T,CKIN
03700 SETFLG: MOVRI T,3 ;4 = 96 ms?
03800 CLRF0 ;Set scan flag
00100 ;INPUT WAIT
00200 OFFSET ← TBIT/2 ;Center delay.
00300 INWAI: JTF UPFLG ;CHECK IF TIMER TIME OUT
00400
00500 CKIN: JT0H INWAI ;CHECK FOR START BIT
00600
00700 MOVRI N,OFFSET-4 ;Center - Itime.
00800 CENTER: DJNZ N,CENTER ;Wait for center of bit
00900 JT0H INWAI ;Check if valid start bit
01000
01100 MOVRI CMD,11 ;# of bits -1
01200 ILOOP: CALL IWAI
01300 DJNZ CMD,ILOOP
01400
01500 ROLC ;Shift out stop bit
01600 JCC GAD ;Check for good stop bit.
01700
01800 MOVAR CMD ;Save led command
01900 CALL CLED ;Clear leds.
01925
01950 ;Update mark.←←
02100 JF0S OSWTCH ;Check if time to scan.
02200 JMP SCAN
02300 ; Output switches
02400 OSWTCH: MOVRA SW0
02500 CALL OBYTE
02600 MOVRA SW1
02700 CALL OBYTE
02800 MOVRA SW2
02900 CALL OBYTE
03000
03900 MOVRA CMD ;Write leds
04000 RORC ;Get cal led
04100 ANI 7
04200 JZ GAD+1
04300 OUTB ;Mode led (1-7)
04400 GAD: CLRA
04500 JCC INWAI
04600 OUTB ;Write cal led
04700 JMP INWAI
00100 ;A/D convert routines.
00200 MOVI 0 ;Speed default.
00300 JT1H SVSPD ;Speed off.
00400
00500 MOVI 0 ;Chanel 0.
00600 OUTB ;Latch bus output.
00700 ORPI 2,14 ;ALE & STRT.
00800 ANPI 2,3 ;NOT ALE & STRT.
00900
01000 CALL CONW ;Convert wait.
01100
01200 INB ;?
01300
01320 JNZ SVSPD
01340 INCA ;Force speed non zero.
01360
01400 SVSPD: MOVAR SPD ;Save speed.
01500
01520 JINT GPOTS ;Scan joy stick.
01540 ;RAM(POTS) ← 0.
01550 JMP SOUT
01560
01600 GPOTS: MOVI 1 ;Chanel 1.
01700 OUTB ;Latch bus output.
01800 ORPI 2,10 ;ALE
01900 ANPI 2,7 ;NOT ALE.
02000
02100 MOVI 2 ;CLR bit.
02200 ORPA JS ;CLR.
02300 CPLA
02400 ANPA JS ;NOT CLR.
02500 MOVRI N,4 ;# of pots + switch channel.
02600
02700 ADLOOP: ORPI 2,4 ;STRT.
02800 ANPI 2,13 ;NOT STRT.
02900 CALL CONW ;Convert wait.
03000 INB ;Read channel.
03100
03200 MOVAM N ;Save pot N?
03300
03400 MOVI 1
03500 ORPA JS ;CNT
03600 CPLA
03700 ANPA JS ;NOT CNT.
03800
03900 DJNZ N,ADLOOP ;Next channel.
04000
04100 SOUT:
00100 ;Joy stick led output routine.
00200 JSLED: MOVAR N ;Save JS led bits.
00300 MOVI 342 ;NOT 1 & 2.
00400 ORPA JS ;CLR
00500 CPLA
00600 ANPA JS ;NOT CLR
00700 SWAP ;A0-3 ← 1.
00800 CNTIT: ORPA JS ;CNT.
00900 CPLA
01000 ANPA JS ;NOT CNT.
01100
01200 DJNZ N,CNTIT
01300
01400 MOVI 4
01500 ORPA JS ;Latch leds.
01600 CPLA
01700 ANPA JS ;NOT LAT.
01800
01900 RET
00100 ; Byte input routine
00200 IWAI: MOVRI N,TBIT-6
00300 WAI: DJNZ N,WAI
00400 CLRC
00500 JT0H BITON
00600 NOP
00700 RORC
00800 RET
00900
01000 BITON: CPLC
01100 RORC
01200 RET
01300
01400 ;Clear leds
01500 CLED: MOVRI N,370
01550 MOVRA N ;Setup regs.
01600 CLRL: OUTB ;Clear led loop
01700 MOVI 7
01800 ANPA JS ;NOT E.
01850 CPLA
01875 ORPA JS ;E
01880 INCR N ;Next led.
01885 MOVRA N
01890 JNZ CLRL
01895
01900 RET ;Return with BUS ← 377
02000
02100 ; Output Acc. to SI/O line
02200 OBYTE: MOVRI K,11 ;# of bits -1
02400 CLRC
02600 ROLC ;Start bit
02700 OLOOP: OUTP 1 ;Output bit
02800 RORC
02900 MOVRI N,TBIT-3 ;TBIT - Itime.
03000
03100 OWAIT: DJNZ N,OWAIT
03200 DJNZ K,OLOOP
03300
03500 ORPI 1,377 ;Stop bit.
03600
03700 MOVRI N,TBIT-7 ;TBIT - Itime.
03800 SWAIT: DJNZ N,SWAIT
03900 NOP
04000 RET
04100
04200 ;Convert wait.
04300 CONW: MOVRI K,=22 ;?
04400 CONL: DJNZ K,CONL
04500 RET
00100 ;Alfa led output routines.
00110 CALED: MOVI 0 ;Clear string index.
00120
00200 OALFA: MOVAR CMD ;Save string index.
00300 MOVI 376 ;NOT CE0.
00400
00500 CENBL: MOVRI N,3 ;# of chrs in I.C.-1.
00600 MOVAR K ;Save CE.
00700 MOVAX CEW ;NOT CE.
00800
00900 CHRL: MOVRA CMD
01000 MOVP3 ;A ← String(chr).
01100 OUTB ;Latch bus output.
01200
01300 MOVI 367
01400 ANPA CEW ;NOT W.
01500 CPLA
01600 ORPA CEW ;W
01700
01800 INCR CMD ;CHR ← CHR+1.
01900 DJNZ N,CHRL
02000
02100 MOVRA K
02200 ROL ;Next CE.
02300 JBS 3,CENBL
02400
02500 ROL ;A ← 17
02600 MOVAX CEW ;CE
02700
02800 RET
00100 ; Bit spreading table
00200 LOC 674 ;674 = Start of page one
00300 0 ↔ 1 ↔ 4 ↔ 5 ↔ 20 ↔ 21 ↔ 24 ↔ 25
00400 100 ↔ 101 ↔ 104 ↔ 105 ↔ 120 ↔ 121 ↔ 124 ↔ 125
00500
00520 SBITS ← 60 ;Scan bits.
00540 ROW0 ← 357 ;Scan row 0.
00560 ROW1 ← 337 ;Scan row 1.
00580
00600 SCAN: CPLF0 ;Reset scan flag
00700 ORPI 2,SBITS ;Turn off rows
00800 ANPI 2,ROW0 ;Enable row 0.
00900 INP 1 ;Scan row 0
01000 CPLA
01100 MOVAR SW0 ;Save it
01200 ANI 17 ;Get low nibble
01300 MOVPD ;Get bits from spread table
01400 XCHR SW0
01500 SWAP ;Swap high low nibbles
01600 ANI 17 ;Get high nibble
01700 MOVPD
01800 MOVAR SW1
01900
02000 ORPI 2,SBITS ;Turn off row 0.
02100 ANPI 2,ROW1 ;Enable row 1.
02200 INP 1 ;Scan row 1
02300 ORPI 2,SBITS ;Disable scan.
02400 CPLA
02500 MOVAR SW2 ;Save row 1
02600 ANI 17 ;Low nibble
02700 MOVPD
02800 ROL ;Shift + bits
02900 ORR SW0 ;Or into - bits
03000 ANI 374 ;Clear teach and off bits.
03100 MOVAR SW0
03200 MOVRA SW2 ;Get row 1 again
03300 SWAP
03400 ANI 17
03500 MOVPD
03600 ROL
03700 ORR SW1
03800 MOVAR SW1
03850
03900 MOVXA 4 ;Get push buttons.
03910 MOVAR SW2 ;Save low nibble.
03920 MOVXA 5
03930 SWAP ;High nibble.
03940 ORR SW2
03950
04000 CPLA
04100 MOVAR SW2
04200 ANI 177 ;Zero spare bit
04300 XCHR SW2
04400 ROLC ;Shift & swap teach & off bits
04500 ROL
04600 ROLC
04700 ANI 3
04800 ORR SW0
04900 MOVAR SW0
05000
05100 JMP OSWTCH
05200 LOC 2272
05300 0 ;This is for a block of zeros
05400 END